package com.hengpeng.itfinoss.service.article;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Set;

import com.hengpeng.common.exception.ServiceResult;
import com.hengpeng.common.persist.query.model.Order.OrderType;
import com.hengpeng.itfinbase.en.ArticleGroupType;
import com.hengpeng.itfinbase.persist.ArticleGroup;
import com.hengpeng.itfinbase.persist.ArticleGroupEx;

/**
 * <pre>
 * 文章分组接口
 * </pre>
 * 
 * @author pengfangliang
 * @version 1.0, 2012-8-7
 */

public interface ArticleGroupSerivce {
    /**
     * <pre>
     * 新增分组类别
     * </pre>
     * 
     * @param articleCategory
     * @return
     */
    public ServiceResult<ArticleGroup> save(ArticleGroup articleGroup);

    /**
     * <pre>
     * 修改分组类别
     * </pre>
     * 
     * @param articleCategory
     * @return
     */
    public ServiceResult<ArticleGroup> update(ArticleGroup articleGroup);

    /**
     * <pre>
     * 获取新闻分组
     * </pre>
     * 
     * @param id
     *            新闻分组流水号
     * @return
     */
    public ServiceResult<ArticleGroup> get(Long id);

    /**
     * <pre>
     * 查询所有的新闻分组
     * </pre>
     * 
     * @return
     */
    public ServiceResult<List<ArticleGroup>> findAll();

    /**
     * <pre>
     * 批量删除新闻分组
     * </pre>
     * 
     * @param ids
     *            新闻分组流水号集合
     * @return
     */
    public ServiceResult<ArticleGroup> delete(Set<Object> ids);

    /**
     * <pre>
     * 分页查询新闻分组
     * </pre>
     * 
     * @param name
     *            新闻分组名称
     * @param remark
     *            描述
     * @param pageIndex
     *            当前页号
     * @param pageSize
     *            每页显示新闻类别数
     * @param sortMap
     *            排序集合
     * @return
     */
    public ServiceResult<List<ArticleGroup>> findArticleGroupPage(String name, String remark, Integer pageIndex,
            Integer pageSize, LinkedHashMap<String, OrderType> sortMap);

    public ServiceResult<Long> findArticleGroupCount(String name);

    /**
     * <pre>
     * 查询新闻组关联记录数
     * </pre>
     * 
     * @param groupIds
     * @param articleIds
     * @return
     */
    public Long countArticleGroupEx(Long[] groupIds, Long[] articleIds);

    public List<ArticleGroupEx> findArticleGroupEx(Long[] groupIds, Long[] articleIds);

    /**
     * 根据类型查找文章分组
     * 
     * @param type
     * @return
     */
    public ArticleGroup getArticleByGroupType(ArticleGroupType type);

}
